package com.chaofan.sell.service;

import com.chaofan.sell.dto.CartDTO;
import com.chaofan.sell.entity.ProductCategory;
import com.chaofan.sell.entity.ProductInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 商品Service
 *
 * @author: Fairy
 * @date: 2021/9/6
 */
public interface ProductService {

    /**
     * 查找一个
     *
     * @param productId 产品id
     * @return 产品信息
     */
    ProductInfo findOne(String productId);

    /**
     * 查找所有上架产品
     *
     * @return 产品列表
     */
    List<ProductInfo> findUpAll();

    /**
     * 查找所有产品（后台专用）
     *
     * @param pageable 页码
     * @return 产品列表
     */
    Page<ProductInfo> findAll(Pageable pageable);

    /**
     * 保存产品
     *
     * @param product 要保存的
     * @return 更新后的
     */
    ProductInfo save(ProductInfo product);

    /**
     * 查询类型
     *
     * @param categoryTypeList 类型编号list
     * @return 类型列表
     */
    List<ProductCategory> findByCategoryTypeIn(List<Integer> categoryTypeList);

    /**
     * 加库存
     *
     * @param cartDTOList 商品库存信息
     */
    void increaseStock(List<CartDTO> cartDTOList);

    /**
     * 减库存
     *
     * @param cartDTOList 商品库存信息
     */
    void decreaseStock(List<CartDTO> cartDTOList);

    /**
     * 商品上架
     *
     * @param productId 商品id
     * @return 商品信息
     */
    ProductInfo onSale(String productId);

    /**
     * 商品下架
     *
     * @param productId 商品id
     * @return 商品信息
     */
    ProductInfo offSale(String productId);
}
